package GUI;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

/*
 * Diese Klasse realisiert das Auswahl-Panel für den eingeloggten Administrator
 */
public class AdminPanel extends JPanel implements ActionListener {
	private JButton btnEigenerPlan;
	private JButton btnLehrkrfte;
	private JButton btnKlassen;
	private JButton btnAusloggen;
	private JLabel lblWochenstunden;
	private JLabel lblXyBelegt;

	/**
	 * Konstruktor der Klasse, ruft die initialize-Methode auf
	 */
	public AdminPanel() {

		initialize();
	}

	/**
	 * Diese Methode initialisert das Panel mit den Buttons
	 */
	private void initialize() {
		final GridBagLayout gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[] { 0, 0 };
		gridBagLayout.rowHeights = new int[] { 0, 0, 0, 0, 0, 0, 0 };
		gridBagLayout.columnWeights = new double[] { 0.0, Double.MIN_VALUE };
		gridBagLayout.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
				Double.MIN_VALUE };
		setLayout(gridBagLayout);
		final GridBagConstraints gbc_btnEigenerPlan = new GridBagConstraints();
		gbc_btnEigenerPlan.fill = GridBagConstraints.HORIZONTAL;
		gbc_btnEigenerPlan.insets = new Insets(0, 0, 5, 0);
		gbc_btnEigenerPlan.gridx = 0;
		gbc_btnEigenerPlan.gridy = 0;
		add(getBtnEigenerPlan(), gbc_btnEigenerPlan);
		final GridBagConstraints gbc_btnLehrkrfte = new GridBagConstraints();
		gbc_btnLehrkrfte.fill = GridBagConstraints.HORIZONTAL;
		gbc_btnLehrkrfte.insets = new Insets(0, 0, 5, 0);
		gbc_btnLehrkrfte.gridx = 0;
		gbc_btnLehrkrfte.gridy = 1;
		add(getBtnLehrkrfte(), gbc_btnLehrkrfte);
		final GridBagConstraints gbc_btnKlassen = new GridBagConstraints();
		gbc_btnKlassen.insets = new Insets(0, 0, 5, 0);
		gbc_btnKlassen.fill = GridBagConstraints.HORIZONTAL;
		gbc_btnKlassen.gridx = 0;
		gbc_btnKlassen.gridy = 2;
		add(getBtnKlassen(), gbc_btnKlassen);
		final GridBagConstraints gbc_lblWochenstunden = new GridBagConstraints();
		gbc_lblWochenstunden.insets = new Insets(0, 0, 5, 0);
		gbc_lblWochenstunden.gridx = 0;
		gbc_lblWochenstunden.gridy = 3;
		add(getLblWochenstunden(), gbc_lblWochenstunden);
		final GridBagConstraints gbc_lblXyBelegt = new GridBagConstraints();
		gbc_lblXyBelegt.insets = new Insets(0, 0, 5, 0);
		gbc_lblXyBelegt.gridx = 0;
		gbc_lblXyBelegt.gridy = 4;
		add(getLblXyBelegt(), gbc_lblXyBelegt);
		final GridBagConstraints gbc_btnAusloggen = new GridBagConstraints();
		gbc_btnAusloggen.fill = GridBagConstraints.HORIZONTAL;
		gbc_btnAusloggen.gridx = 0;
		gbc_btnAusloggen.gridy = 5;
		add(getBtnAusloggen(), gbc_btnAusloggen);
	}

	/**
	 * Diese Methode gibt den Button: btnEigenerPlan zurück. Existiert dieser
	 * Button nicht, wird er durch die Methode neu initialisert.
	 * 
	 * @return btnEigenerPlan Button der durch Betätigen den Stundenplan des
	 *         eingeloggten Users anzeigen lässt.
	 */
	private JButton getBtnEigenerPlan() {
		if (btnEigenerPlan == null) {
			btnEigenerPlan = new JButton("Eigener Plan");
			btnEigenerPlan.addActionListener(this);
		}
		return btnEigenerPlan;
	}

	/**
	 * Diese Methode gibt den Button: btnLehrkfte zurück. Existiert dieser
	 * Button nicht, wird er durch die Methode neu initialisert.
	 * 
	 * @return btnLehrkrfte Button der durch Betätigen ein Fenster zum Editieren
	 *         von Lehrkräften öffnet.
	 */
	private JButton getBtnLehrkrfte() {
		if (btnLehrkrfte == null) {
			btnLehrkrfte = new JButton("Lehrkräfte");
			btnLehrkrfte.addActionListener(this);
		}
		return btnLehrkrfte;
	}

	/**
	 * Diese Methode gibt den Button: btnKlassen zurück. Existiert dieser Button
	 * nicht, wird er durch die Methode neu initialisert.
	 * 
	 * @return btnKlassen Button der durch Betätigen ein Fenster zum Editieren
	 *         von Klassen öffnet.
	 */
	private JButton getBtnKlassen() {
		if (btnKlassen == null) {
			btnKlassen = new JButton("Klassen");
			btnKlassen.addActionListener(this);
		}
		return btnKlassen;
	}

	/**
	 * Diese Methode gibt den Button: btnAusloggen zurück. Existiert dieser
	 * Button nicht, wird er durch die Methode neu initialisert.
	 * 
	 * @return btnAusloggen Button der durch Betätigen den aktuellen User
	 *         ausloggt.
	 */
	private JButton getBtnAusloggen() {
		if (btnAusloggen == null) {
			btnAusloggen = new JButton("Ausloggen");
			btnAusloggen.addActionListener(this);
		}
		return btnAusloggen;
	}

	/**
	 * Diese Methode bekommt das ActionEvent übergeben, dass beim Betätigen des
	 * jeweiligen Button ausgegeben wird. Sie realisiert damit die Funktionen
	 * der jeweiligen Buttons.
	 * 
	 * @Param arg0 Action-Event des betätigten Buttons.
	 */
	@Override
	public void actionPerformed(final ActionEvent arg0) {
		if (arg0.getSource() == getBtnEigenerPlan()) {
			StundenplanController.getInstance().setEigenPlan();
		} else if (arg0.getSource() == getBtnKlassen()) {
			StundenplanController.getInstance().updateKlassen();
		} else if (arg0.getSource() == getBtnLehrkrfte()) {
			StundenplanController.getInstance().updateLehrkraefte();
		} else {
			StundenplanController.getInstance().ausloggen();
		}

	}

	/**
	 * Diese Methode gibt das Label mit "Wochenstunden: " zurück. Existiert
	 * dieses nicht, wird es hierdurch erzeugt.
	 * 
	 * @return lblWochenstunden Label indem "Wochenstunden:" steht.
	 */
	private JLabel getLblWochenstunden() {
		if (lblWochenstunden == null) {
			lblWochenstunden = new JLabel("Wochenstunden:");
		}
		return lblWochenstunden;
	}

	/**
	 * Diese Methode gibt das Label mit "x/y belegt" zurück. Existiert dieses
	 * nicht, wird es hierdurch erzeugt.
	 * 
	 * @return lblXyBelegt Label mit der Belegung der Wochenstunden
	 */
	public JLabel getLblXyBelegt() {
		if (lblXyBelegt == null) {
			lblXyBelegt = new JLabel("x/y belegt");
		}
		return lblXyBelegt;
	}
}
